using System;
using System.Windows.Forms;
using FBroSharp.Lib;
using FBroSharp.Event;
using FBroSharp.DataType;
using FBroSharp.Value;
using FBroSharp.Const;

namespace ProxySwitchBrowser
{
    /// <summary>
    /// 浏览器事件处理器 - 处理浏览器生命周期事件
    /// </summary>
    public class BrowserEvent : FBroSharpBrowserEvent
    {
        private Form1 _form;

        public BrowserEvent(Form1 form)
        {
            _form = form;
        }

        /// <summary>
        /// 浏览器创建完成
        /// </summary>
        public override void OnAfterCreated(IFBroSharpBrowser browser, IFBroSharpDictionaryValue extrainfo)
        {
            _form.OnBrowserCreated(browser);
        }

        /// <summary>
        /// 地址栏变更
        /// </summary>
        public override void OnAddressChange(IFBroSharpBrowser browser, IFBroSharpFrame frame, string url)
        {
            if (frame.IsMain())
            {
                _form.OnAddressChanged(url);
            }
        }

        /// <summary>
        /// 标题变更
        /// </summary>
        public override void OnTitleChange(IFBroSharpBrowser browser, string title)
        {
            _form.OnTitleChanged(title);
        }

        /// <summary>
        /// 加载状态变更
        /// </summary>
        public override void OnLoadingStateChange(IFBroSharpBrowser browser, bool isLoading, bool canGoBack, bool canGoForward)
        {
            _form.OnLoadingStateChanged(isLoading, canGoBack, canGoForward);
        }

        /// <summary>
        /// 页面加载开始
        /// </summary>
        public override void OnLoadStart(IFBroSharpBrowser browser, IFBroSharpFrame frame, FBroSharpTransitionType transition_type)
        {
            if (frame.IsMain())
            {
                _form.OnLoadStart(frame.GetURL());
            }
        }

        /// <summary>
        /// 页面加载完成
        /// </summary>
        public override void OnLoadEnd(IFBroSharpBrowser browser, IFBroSharpFrame frame, int httpStatusCode)
        {
            if (frame.IsMain())
            {
                _form.OnLoadEnd(frame.GetURL(), httpStatusCode);
            }
        }

        /// <summary>
        /// 页面加载错误
        /// </summary>
        public override void OnLoadError(IFBroSharpBrowser browser, IFBroSharpFrame frame, int errorCode, string errorText, string failedUrl)
        {
            if (frame.IsMain())
            {
                _form.OnLoadError(failedUrl, errorText);
            }
        }

        /// <summary>
        /// 阻止新窗口弹出，在当前窗口打开链接
        /// </summary>
        public override bool OnBeforePopup(IFBroSharpBrowser browser, IFBroSharpFrame frame, string target_url, string target_frame_name, 
            FBroSharpWindowOpenDisposition target_disposition, bool user_gesture, FBroSharpPopupfeatures popupFeatures, 
            ref FBroSharpWindowsInfo windowInfo, ref FBroSharpBrowserSetting settings, ref bool no_javascript_access, 
            IFBroSharpUseExtraData user_settings)
        {
            frame.LoadURL(target_url);
            return true; // true = 阻止弹窗
        }

        /// <summary>
        /// 浏览器即将关闭
        /// </summary>
        public override void OnBeforeClose(IFBroSharpBrowser browser)
        {
            Console.WriteLine("浏览器即将关闭");
        }

        /// <summary>
        /// 是否允许关闭浏览器
        /// </summary>
        public override bool DoClose(IFBroSharpBrowser browser)
        {
            return false; // false = 允许关闭
        }
    }
}

